import {
  defineStore
} from 'pinia';
import userApi from '@/nx/api/user';
import getStorageItem from '@/utils/getStorageItem';
import _ from "lodash"
import request from '../request';
import {
  promise
} from '../../uni_modules/uv-ui-tools/libs/function/test';
// 默认用户信息
const defaultUserInfo = {
  avatar: '', // 头像
  nickname: '', // 昵称
  wx_openId: '', // 微信openid
  username: '', // 用户名
  // gender: 0, // 性别
  // mobile: '', // 手机号
  // A_TK: "",
  // EncUser: "",
  // R_TK: "",
  // create_time: "",
  // isVIP: "",
  // level: "",
  // qUserNickname: "",
  // qUserPhone: "",
  // update_time: "",
};


const defaultToken = {
  accessToken: '',
  refreshToken: ''
}

// console.log(defaultToken);


const user = defineStore('user', {
  // id: 'user',
  state: () => ({
    userInfo: {
      ...defaultUserInfo
    }, // 用户信息
    token: {
      ...defaultToken
    }, // token信息
    // isLogin: !!getAccessToken(), // 登录状态
    isLogin: false, // 登录状态
  }),
  persist: {
    enabled: true,
    H5Storage: localStorage
  },
  getters:{
    // isLogin: !!getAccessToken(), // 登录状态
  },
  actions: {
    // 设置token
    setToken(data) {
      // token已经持久化，在user--token中。
      // console.log("调用了setToken", data);
      const {
        access_token,
        refresh_token
      } = data
      this.token.accessToken = access_token || this.token.accessToken
      this.token.refreshToken = refresh_token || this.token.refreshToken
      // console.log("加入Storage的token",this.token);
      uni.setStorageSync('token', this.token)
      // this.setToken()
      this.isLogin = true  //状态改为登录了
    },

    // 获取个人信息
    async getInfo() {
      const resp = await userApi.profile();
      if (resp.code === 200) {
        Object.assign(this.userInfo, resp.data)
        return '成功获取'
      } else {
        return Promise.reject(new Error(resp.msg))
      }
    },
    // 刷新token并设置到storage
    async refreshToken() {
      let resp = await userApi.refresh()
      // console.log('Store中',resp.data.access_token);
      if (resp.code === 200) {
        // this.token.accessToken = resp
        // console.log("刷新后",this.token);
        this.setToken(resp.data)
        return '刷新成功'
      } else {
        // 刷新失败就回首页
        return Promise.reject(new Error('刷新失败'))
        // uni.switchTab({
        //   url:'/pages/login/login'
        // })
      }

    },


    // 设置token
    // setToken(token = defaultToken) {
    //   if (token === defaultToken) {
    //     console.log('token未获取');
    //     this.isLogin = false;
    //     uni.removeStorageSync('token');
    //   } else {
    //     console.log('token获取了', token);
    //     this.isLogin = true;
    //     uni.setStorageSync('token', token);
    //   }
    //   return this.isLogin;
    // },

    // 重置用户默认数据
    resetUserData() {
      // 这里主要是因为后端返回的数据和前端命名不一样
      // const clearToken = {
      //   access_token: "",
      //     refresh_token:"",
      // }
      uni.removeStorageSync('token')
      // this.setToken(clearToken);
      this.userInfo = _.clone(defaultUserInfo);
      this.token = _.clone(defaultToken)
      this.isLogin = false
      this.token = defaultToken
    },
    // 登出，先简单一点
    logout() {
      // 清除所有用户数据，并跳转到登录页
      this.resetUserData()
      uni.reLaunch({
        url: '/pages/login/login'
      })
    }
    // async logout(force = false) {
    //     if (!force) {
    //       const { error } = await userApi.logout();
    //       if (error === 0) {
    //         this.resetUserData();
    //       }
    //     }
    //     if (force) {
    //       this.resetUserData();
    //     }
    // // 这里是不是应该返回false? 而不是取反？
    //     return !this.isLogin;
    // },
  }

});

export default user;